﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using BusinessEntities.Model;
namespace DAL
{
    public interface IDAL
    {
        /*
         * GET
         */
        //City
        IEnumerable<City> GetAllCities();
        IEnumerable<City> GetCitiesByKeyword(string keyword);
        IEnumerable<City> GetCitiesByStartsWith(string startsWith);
        City GetCityByName(string name);

        //Users
        IEnumerable<User> GetAllUsers();
        User GetUserById(int id);
        User GetUserByEmail(string email);

        //Events
        IEnumerable<Event> GetUsersEvents(User user);
        Event GetEventById(int id);

        //Halls
        IEnumerable<Hall> GetAllHalls();

        //Invites
        IEnumerable<Invite> GetEventsInvites(Event aEvent);
        IEnumerable<Invite> GetAllInvites();

        //Guest
        IEnumerable<Guest> GetUsersGuests(User user);
        Guest GetUsersGuestByEmail(string email,int userid);
        Guest GetGuestByID(int id);
        IEnumerable<Invite> GetGuestsInvites(Guest g);
        IEnumerable<Guest> SearchForGuests(string keyword, int userid);

        //Gift
        IEnumerable<Gift> GetGuestsGifts(Guest guest);

        /*
         * CREATE
         */
        User CreateUser(User user);
        Event CreateEvent(Event aEvent);
        Hall CreateHall(Hall hall);
        Invite CreateInvite(Invite invite);
        Guest CreateGuest(Guest guest);
        Gift CreateGift(Gift gift);

        /*
         * UPDATE
         */
        User UpdateUser(User user);
        Event UpdateEvent(Event aEvent);
        Hall UpdateHall(Hall hall);
        Invite UpdateInvite(Invite invite);
        Guest UpdateGuest(Guest guest);
        Gift UpdateGift(Gift gift);

        /*
         * DELETE
         */
        void DeleteUser(User user);
        void DeleteEvent(Event aEvent);
        void DeleteHall(Hall hall);
        void DeleteInvite(Invite invite);
        void DeleteGuest(Guest guest);
        void DeleteGift(Gift gift);





        
    }
}
